#ifndef __NET_H__
#define __NET_H__

#include "utils.h"


/* Ethernet Constants */
#define N_ETH_ALEN  6
#define N_ETH_HLEN  sizeof(n_eth_hdr_t)

/* Ethernet Address */
typedef struct
{
   m_uint8_t eth_addr_byte[N_ETH_ALEN];
} __attribute__ ((__packed__)) n_eth_addr_t;
/* Ethernet Header */
typedef struct
{
   n_eth_addr_t daddr;          /* destination eth addr */
   n_eth_addr_t saddr;          /* source ether addr    */
   m_uint16_t type;             /* packet type ID field */
} __attribute__ ((__packed__)) n_eth_hdr_t;


/* Check for a broadcast/multicast ethernet address */
static inline int eth_addr_is_bcast(n_eth_addr_t * addr)
{
   return ((addr->eth_addr_byte[0] == 0xff)
           && (addr->eth_addr_byte[1] == 0xff)
           && (addr->eth_addr_byte[2] == 0xff)
           && (addr->eth_addr_byte[3] == 0xff) && (addr->eth_addr_byte[4] == 0xff) && (addr->eth_addr_byte[5] == 0xff));
}

static inline int eth_addr_is_mcast(n_eth_addr_t * addr)
{
   return ((!eth_addr_is_bcast(addr)) && (addr->eth_addr_byte[0] & 1));

}


#endif
